/*
 * CShader.h
 *
 *      Author: grifos
 */

#ifndef CSHADER_H_
#define CSHADER_H_
#include <iostream>
#include <GL/glew.h>

class CShader {
private:
	static CShader*	_currentShader;
	char*			_ShaderName;
	GLhandleARB		_CompiledShader;
	bool 	_loaded; // Indique si le shader a été loadé

	static GLhandleARB loadShader(const std::string& shaderPath); // Chargement du fichier d'un shader
	static bool compileShader(GLhandleARB object); // Compilation
	static GLhandleARB linkShaders(GLhandleARB* object, const unsigned int& nb); // Linkage
public:
	CShader();
	virtual ~CShader();

	bool Load(char* name); // Chargement d'un shader
	void StartUse(); // Activation du shader
	static void EndUse(); // Desactivation du shader

	// Méthodes de communication avec le shader
	void UniformTexture(const std::string& ext, GLint slot); // Envoit un id de texture au shader en fonction du nom de la varaible
	void Uniform(const std::string& ext, GLint value); // Envoit un GLint au shader en fonction du nom de la variable
	void Uniform(const std::string& ext, GLfloat value); // Envoit un GLfloat au shader en fonction du nom de la variable
	bool isLoaded() { return _loaded; }
};

#endif /* CSHADER_H_ */
